package com.day08.entity;

// JavaBean：所有的属性都是私有的，并且每个属性都配备公开的get/set方法。
// 面向对象语言的三大特性：封装，继承，多态
public class Student {
    private String stuName;
    private int stuAge;
    private String stuGender;

    // 当一个类中没有显示的构造方法的时候，会自动配备一个默认无参的构造方法。
    // 如果类中出现任何一个显示的构造方法，那么这个默认无参的构造方法就消失了。
    public Student(){

    }

    // 构造方法：长相特殊，跟类同名，并且没有返回类型
    // 构造方法只能在创建对象的时候调用且仅能调用一次
    public Student(String stuName,int stuAge,String stuGender){
        this.stuName = stuName;
        this.stuAge = stuAge;
        this.stuGender = stuGender;
    }

    // 方法重载:在同一个类中，方法名相同，参数组不同。(参数组的不同包含：参数类型不一致，参数个数不一致，参数顺序不一致)
    public Student(String stuName){
        this.stuName = stuName;
    }

    // 利用参数给属性赋值
    public void setStuName(String stuName){
        // 局部变量可以和属性重名，局部变量拥有更高的优先级。
        // 在局部变量和属性重名的情况下，使用this.的就是属性。
        this.stuName = stuName;
    }

    public String getStuName(){
        return stuName;
    }

    public void setStuAge(int stuAge){
        if(stuAge >= 18 && stuAge <= 40) {
            this.stuAge = stuAge;
        }else{
            this.stuAge = 18;
        }
    }

    public int getStuAge(){
        return stuAge;
    }

    public String getStuGender() {
        return stuGender;
    }

    public void setStuGender(String stuGender) {
        this.stuGender = stuGender;
    }

    public void sayHello(){
        System.out.println("你好，很高兴认识你");
    }
    // 方法重载是多个方法。
    public void sayHello(String name){
        System.out.println("你好，" + name + "，很高兴认识你");
    }
}
